package com.platform.file.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;

/**
 * 文件上传接口
 *
 * @author mbtec
 */
public interface ISysFileService
{
    /**
     * 文件上传接口
     * 文件上传接口（根据文件类型上传）
     *
     * @param file 上传的文件
     * @param serviceName 调用服务名
     * @param cataloguePrefix 目录前缀
     * @return 访问地址
     * @throws Exception
     */
    public String upload(MultipartFile file, String serviceName, String cataloguePrefix) throws Exception;
    public String uploadShareFile(MultipartFile file, String filePath) throws Exception;


    /**
     * 文件上传接口
     * 文件上传接口（根据文件类型上传）
     *
     * @param file 上传的文件
     * @param serviceName 调用服务名
     * @param cataloguePrefix 目录前缀
     * @param bucketName 桶
     * @return 访问地址
     * @throws Exception
     */
    public String uploadByBucketName(MultipartFile file, String serviceName, String cataloguePrefix,String bucketName) throws Exception;
    /**
     * 文件上传接口
     * 文件上传接口（根据文件类型上传）
     *
     * @param inputStream 上传的文件流
     * @param serviceName 调用服务名
     * @param cataloguePrefix 目录前缀
     * @param bucketName 桶
     * @return 访问地址
     * @throws Exception
     */
    public String uploadByBase64(String fileName,InputStream inputStream, String serviceName, String cataloguePrefix,String bucketName) throws Exception;
    /**
     * 异步文件上传接口(自定义文件名)
     *
     * @param inputStream 上传的文件
     * @param filePath 文件路径
     * @param contentType
 * @return 访问地址
     * @throws Exception
     */
    @Async
    public String uploadByAsyncFileName(InputStream inputStream, String filePath, String contentType)  throws Exception;


    /**
     * 异步文件上传接口(自定义文件名)
     *
     * @param inputStream 上传的文件
     * @param filePath 文件路径
     * @param contentType
     * @param bucketName
     * @return 访问地址
     * @throws Exception
     */
    @Async
    public String uploadByAsyncFileNameAndBucketName(InputStream inputStream, String filePath, String contentType,String bucketName)  throws Exception;


    /**
     * 获取文件
     * @param filePath
     * @return
     * @throws Exception
     */
    InputStream downLoadFile(String filePath) throws Exception;

    /**
     * 上传文件
     * @param filePath
     * @param inputStream
     * @param contentType
     * @return
     * @throws Exception
     */
    String uploadFile(String filePath, InputStream inputStream,String contentType) throws Exception;

    /**
     * 删除文件
     * @param filePath
     * @throws Exception
     */
    void deleteFile(String filePath) throws Exception;

    /**
     * 获取文件(可指定bucketName)
     * @param filePath
     * @return
     * @throws Exception
     */
    InputStream downLoadFileNew(String bucketName,String filePath) throws Exception;
}
